/* ==================================================
 *  spdlog >= 1.5
 *  spdlog.h 不包含 stdout_color_mt
 *  需要包含 spdlog/sinks/stdout_color_sinks.h
 * ================================================== */
#include <spdlog/spdlog.h>
#include <spdlog/sinks/stdout_color_sinks.h>   
#include <spdlog/sinks/basic_file_sink.h>
#include <iostream>

/* =====================================
 * 日志输出等级枚举
 *  enum level_enum : int {
 *      trace = SPDLOG_LEVEL_TRACE,
 *      debug = SPDLOG_LEVEL_DEBUG,
 *      info = SPDLOG_LEVEL_INFO,
 *      warn = SPDLOG_LEVEL_WARN,
 *      err = SPDLOG_LEVEL_ERROR,
 *      critical = SPDLOG_LEVEL_CRITICAL,
 *      off = SPDLOG_LEVEL_OFF,
 *      n_levels
 *  };
* ===================================== */

/* ==========================================================
 * 设置日志输出格式
 *   %t - 线程 ID（Thread ID）
 *   %n - 日志器名称（Logger name）
 *   %l - 日志级别名称（Level name），如 INFO, DEBUG, ERROR 等
 *   %v - 日志内容（message）
 *   %Y %m %d - 年月日
 *   %H %M %S - 时分秒（24-hour）。
* ========================================================== */

int main()
{
    // 设置全局刷新策略
    spdlog::flush_every(std::chrono::seconds(1));        // 刷新频率
    spdlog::flush_on(spdlog::level::level_enum::debug);  // 刷新的最低等级
    spdlog::set_level(spdlog::level::level_enum::debug); // 全局日志输出等级(每个日志器可以独立设置)
    
    // 创建同步日志器(工厂接口默认创建的也是同步日志器)
    // stdout_color_mt 标准文件输出, basic_logger_mt 普通文件输出
    // auto logger = spdlog::stdout_color_mt("default-logger"); 
    auto logger = spdlog::basic_logger_mt("file-logger", "sync.log");

    // 设置输出格式
    logger->set_pattern("[%n][%H:%M:%S][%t][%-8l] %v");
    logger->trace("spdlog print: {}", "this is a spdlog-demo file");
    logger->debug("spdlog print: {}", "this is a spdlog-demo file");
    logger->info("spdlog print: {}", "this is a spdlog-demo file");
    logger->warn("spdlog print: {}", "this is a spdlog-demo file");
    logger->error("spdlog print: {}", "this is a spdlog-demo file");
    logger->critical("spdlog print: {}", "this is a spdlog-demo file");

    return 0;
}